/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package util;

import com.toedter.calendar.JDateChooser;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Desktop;
import java.awt.event.KeyEvent;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.net.URISyntaxException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.Normalizer;
import java.util.Locale;
import javax.swing.*;

/**
 *
 * @author gilberto.costa
 */
public class Utilitario {

    public static String removeAcentos(String str) {
        CharSequence cs = new StringBuilder(str == null ? "" : str);
        return Normalizer.normalize(cs, Normalizer.Form.NFKD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
    }

    public static String removeCaracterdeUmaString(String str) {
        String[] caracteresEspeciais = {"\\.", ",", "-", ":", "\\(", "\\)", "ª", "\\|", "\\\\", "°", "//", "/"};

        for (int i = 0; i < caracteresEspeciais.length; i++) {
            str = str.replaceAll(caracteresEspeciais[i], "");
        }
        //         * Troca os espaços no início por "" *
        str = str.replaceAll("^\\s+", "");
        //         * Troca os espaços no início por "" *
        str = str.replaceAll("\\s+$", "");
        //         * Troca os espaços duplicados, tabulações e etc por " " *
        str = str.replaceAll("\\s+", " ");
        return str;
    }

    public static String removeVirgulaDosNumeros(String str) {
        String[] caracteresEspeciais = {"\\."};
        for (int i = 0; i < caracteresEspeciais.length; i++) {
            str = str.replaceAll(caracteresEspeciais[i], "");
        }
        return str;
    }

    public static boolean IsNumber(String Numero) {
        try {
            Long.parseLong(Numero);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

//    public void defineCorLabel(Container container) {
//        String[] cores = Fr_Principal.configuracao.getCorLabel().split(",");
//        for (Component component : container.getComponents()) {
//            if (component instanceof JLabel) {
//                ((JLabel) component).setForeground(new Color(Integer.parseInt(cores[0]), Integer.parseInt(cores[1]), Integer.parseInt(cores[2])));
//            }
//            defineCorLabel((Container) component);
//        }
//    }
    public static void limparTodosCampos(Container container) {
        try {
            Component components[] = container.getComponents();
            for (Component component : components) {
                if (component instanceof JFormattedTextField) {
                    JFormattedTextField field = (JFormattedTextField) component;
                    field.setText(null);
                } else if (component instanceof JTextField) {
                    JTextField field = (JTextField) component;
                    field.setText(new String());
                } else if (component instanceof JTextArea) {
                    JTextArea field = (JTextArea) component;
                    field.setText(new String());
                } else if (component instanceof JDateChooser) {
                    JDateChooser field = (JDateChooser) component;
                    field.setDate(null);
                } else if (component instanceof JCheckBox) {
                    JCheckBox field = (JCheckBox) component;
                    field.setSelected(false);
                } else if (component instanceof JComboBox) {
                    JComboBox field = (JComboBox) component;
                    field.setSelectedIndex(0);
                } else if (component instanceof Container) {
                    limparTodosCampos((Container) component);
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro no método (limparTodosCampos) classe Utilitario" + e);
//            geraArquivoDeErro(Fr_Principal.configuracao.getDiretorioErros(), "limparTodosCampos", "Erro no método (limparTodosCampos) classe Utilitario \r\n" + e);
        }
    }

    public static void liberaTodosCampos(Container container) {
        Component components[] = container.getComponents();
        for (Component component : components) {
            if (component instanceof JFormattedTextField) {
                JFormattedTextField field = (JFormattedTextField) component;
                field.setEditable(true);
                field.setBackground(new Color(254, 241, 176));
            } else if (component instanceof JTextField) {
                JTextField field = (JTextField) component;
                field.setEditable(true);
                field.setBackground(new Color(254, 241, 176));
            } else if (component instanceof JTextArea) {
                JTextArea field = (JTextArea) component;
                field.setEditable(true);
                field.setBackground(new Color(254, 241, 176));
            } else if (component instanceof JDateChooser) {
                JDateChooser field = (JDateChooser) component;
                field.setEnabled(true);
                field.setBackground(new Color(254, 241, 176));
            } else if (component instanceof JCheckBox) {
                JCheckBox field = (JCheckBox) component;
                field.setEnabled(true);
            } else if (component instanceof JComboBox) {
                JComboBox field = (JComboBox) component;
                field.setEnabled(true);
                field.setBackground(new Color(254, 241, 176));
            } else if (component instanceof Container) {
                liberaTodosCampos((Container) component);
            }
        }
    }

    public static void bloqueiaTodosCampos(Container container) {
        Component components[] = container.getComponents();
        for (Component component : components) {
            if (component instanceof JFormattedTextField) {
                JFormattedTextField field = (JFormattedTextField) component;
                field.setEditable(false);
                field.setBackground(Color.WHITE);
            } else if (component instanceof JTextField) {
                JTextField field = (JTextField) component;
                field.setEditable(false);
                field.setBackground(Color.WHITE);
            } else if (component instanceof JTextArea) {
                JTextArea field = (JTextArea) component;
                field.setEditable(false);
                field.setBackground(Color.WHITE);
            } else if (component instanceof JDateChooser) {
                JDateChooser field = (JDateChooser) component;
                field.setEnabled(false);
                field.setBackground(Color.WHITE);
            } else if (component instanceof JCheckBox) {
                JCheckBox field = (JCheckBox) component;
                field.setEnabled(false);
            } else if (component instanceof JComboBox) {
                JComboBox field = (JComboBox) component;
                field.setEnabled(false);
                field.setBackground(Color.WHITE);
            } else if (component instanceof Container) {
                bloqueiaTodosCampos((Container) component);
            }
        }
    }

    public static void IrParaSite(String site) {
        if (!site.equalsIgnoreCase("") && site.contains(".com.br")) {
            int opcao;
            Object[] botoes = {"Sim", "Cancelar"};
            opcao = JOptionPane.showOptionDialog(null, "Deseja ir para (http://" + site + ")?",
                    "Confirmação!", JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null, botoes, botoes[0]);
            if (opcao == JOptionPane.YES_OPTION) {
                Desktop desk = java.awt.Desktop.getDesktop();
                try {
                    desk.browse(new java.net.URI("http://" + site));
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (URISyntaxException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static String criptografaSenha(String senha) throws NoSuchAlgorithmException {
        //Essa classe pega um valor de tamanho arbitrario e transforma em um valor de tamanho fixo
        MessageDigest md = MessageDigest.getInstance("SHA");
        //Atualiza o valor com os bytes especificados
        md.update(senha.getBytes());
        //Conclui o cálculo de hash realizando operações finais, tais como  preenchimento.
        BigInteger hash = new BigInteger(1, md.digest());
        //Retorna a representação String decimal deste BigInteger, com tamanho igual a 16.
        String retornaSenha = hash.toString(16);
        return retornaSenha;
    }

    public static DecimalFormat decimalFormat() {
        DecimalFormatSymbols DOLAR = new DecimalFormatSymbols(Locale.US);
        DecimalFormat DINHEIRO_DOLAR = new DecimalFormat("¤ ###,###,##0.00", DOLAR);
        DecimalFormatSymbols EURO = new DecimalFormatSymbols(Locale.GERMANY);
        DecimalFormat DINHEIRO_EURO = new DecimalFormat("¤ ###,###,##0.00", EURO);
        Locale BRAZIL = new Locale("pt", "BR");
        DecimalFormatSymbols REAL = new DecimalFormatSymbols(BRAZIL);
        DecimalFormat DINHEIRO_REAL = new DecimalFormat("###,###,##0.00", REAL);
        return DINHEIRO_REAL;
    }

    public static void geraArquivoDeErro(String path, String nomeArquivo, String conteudo) {
        try {
            BufferedWriter saida = new BufferedWriter(new FileWriter(path + nomeArquivo + ".txt"));
            saida.write(conteudo);
            saida.close();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao gerar arquivo de erro" + e);
        }
    }

    public static Integer verificaEntradaNumericaVirgulaPonto(java.awt.event.KeyEvent evt) {
        int k = evt.getKeyChar();
        System.out.println(k);
        if ((k > 47 && k < 58) || k == 44 || k == 46) {
            return k;
        } else {
            evt.setKeyChar((char) KeyEvent.VK_CLEAR);
            return null;
        }
    }

    public static Integer verificaEntradaSomentoNumerica(java.awt.event.KeyEvent evt) {
        int k = evt.getKeyChar();
        System.out.println(k);
        if ((k > 47 && k < 58)) {
            return k;
        } else {
            evt.setKeyChar((char) KeyEvent.VK_CLEAR);
            return null;
        }
    }

    public static String repete(String string, int quantidade) {
        StringBuffer retorno = new StringBuffer();
        for (int j = 0; j < quantidade; j++) {
            retorno.append(string);
        }
        return retorno.toString();
    }
}